import { fileURLToPath, URL } from "node:url";
import { resolve } from "path";
import { defineConfig, loadEnv } from "vite";
import type { UserConfig, ConfigEnv } from "vite";
import vue from "@vitejs/plugin-vue";
import vueJsx from "@vitejs/plugin-vue-jsx";
import vueDevTools from "vite-plugin-vue-devtools";
import { createHtmlPlugin } from "vite-plugin-html";

// 自动导入相关插件
import AutoImport from "unplugin-auto-import/vite";
import Components from "unplugin-vue-components/vite";
import { ElementPlusResolver } from "unplugin-vue-components/resolvers";
import Icons from "unplugin-icons/vite";
import IconsResolver from "unplugin-icons/resolver";
import { createSvgIconsPlugin } from "vite-plugin-svg-icons";

import UnoCSS from "unocss/vite";

// 文件路径
const pathSrc = fileURLToPath(new URL("./src", import.meta.url));
export default defineConfig(({ mode }: ConfigEnv): UserConfig => {
	const env = loadEnv(mode, process.cwd());
	return {
		base: "./",
		resolve: {
			alias: {
				"@": pathSrc,  
			},
		},
		// dev环境代理服务器设置
		server: {
			// 允许IP访问
			host: "0.0.0.0",
			// 应用端口
			port: Number(env.VITE_APP_PORT),
			// 运行是否自动打开浏览器
			open: true,
			proxy: {
				// 代理请求
				[env.VITE_APP_BASE_API]: {
					changeOrigin: true,
					// 接口地址
					target: env.VITE_APP_API_URL,
					rewrite: (path) => path.replace(new RegExp("^" + env.VITE_APP_BASE_API), ""),
				},
				[env.VITE_APP_MOBILE_API]: {
					changeOrigin: true,
					// 接口地址
					target: env.VITE_APP_MOBILE_API_URL,
					rewrite: (path) => path.replace(new RegExp("^" + env.VITE_APP_MOBILE_API), ""),
				},
			},
		},
		plugins: [
			vue(),
			vueJsx(),
			vueDevTools(),
			UnoCSS(),
			//html配置插件
			createHtmlPlugin({
				minify: true,
				//在html中添加入口文件
				entry: "src/main.ts",
				//注入打包时需要的变量
				inject: {
					data: {
						title: "cpsc-ai", // 出现在模版中的 <%- title %>
					},
				},
			}),
			AutoImport({
				// 自动导入 Vue 相关函数，如：ref, reactive, toRef 等
				imports: ["vue", "@vueuse/core", "pinia", "vue-router"],
				resolvers: [
					// 自动导入 Element Plus 相关函数
					ElementPlusResolver(),
					// 自动导入图标组件
					IconsResolver({}),
				],
				// 是否在 vue 模板中自动导入
				vueTemplate: true,
				// 指定自动导入函数TS类型声明文件路径 (false:关闭自动生成)
				dts: false,
				// dts: "src/typings/auto-imports.d.ts",
			}),
			Components({
				resolvers: [
					// 自动导入 Element Plus 组件
					ElementPlusResolver(),
					// 自动注册图标组件
					IconsResolver({
						// element-plus图标库，其他图标库 https://icon-sets.iconify.design/
						enabledCollections: ["ep"],
					}),
				],
				// 自动导入自定义组件
				dirs: ["src/components", "src/**/components"],
				// 指定自动导入组件TS类型声明文件路径 (false:关闭自动生成)
				dts: false,
				// dts: "src/typings/components.d.ts",
			}),
			Icons({
				// 自动安装图标库
				autoInstall: true,
			}),
			//用于生成svg贴图
			createSvgIconsPlugin({
				// 指定需要缓存的图标文件夹
				iconDirs: [resolve(pathSrc, "assets/icons")],
				// 指定symbolId格式
				symbolId: "icon-[dir]-[name]",
			}),
		],
	};
});
